﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DoveyAsyncAndAwait
{
    /// <summary>
    /// await/async 语法与使用
    /// 
    /// await/async 是保留关键字，通常是成对出现
    /// async 修饰方法，可以单独出现，但是有警告
    /// await 在方法体，只能出现在task/async方法签名，只有await会报错
    /// 
    /// 主线程调用async/await 方法，主线程遇到await返回执行后续动作，
    ///     await后面的代码会等着task任务的完成后再继续运行
    ///     这个回调的线程是不确定的，可能是主线程，也能是子线程，也可能是其他线程
    ///     
    /// 
    /// 一个async方法，如果没有返回值的话，可以返回一个task
    /// 
    /// 
    /// async 方法再编译后会生成一个状态机，（实现了IAsyncStateMachine接口）
    /// 状态机：初始化状态0-执行就修改状态1-再执行就修改状态0-执行就修改状态1-如果出现其他状态就结束了
    /// 
    /// async 方法里面的逻辑其实都放在了MoveNext中，主线程new一个状态机状态-1、主线程调用Movenext--执行了之前的东西--启动Task--主线程改状态为0--回去干自己的事儿
    /// ---子线程再去moveNext，--状态有回归-1，再继续修改修改，
    /// 
    /// 语法糖：由编译器提供的功能
    /// </summary>
    public class AwaitAsyncClass
    {
        /// <summary>
        /// 
        /// </summary>
        public void show()
        {

        }
    }
}
